package Grafica;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;



import javax.swing.*;

import Gioco.Costanti;
import Gioco.Pedina;

public class PedinaGUI extends JLabel{
	private static final long serialVersionUID = 1L;
	int seme;
	int valore;
	String nomeImmagine;
	int angle = 0;
	public PedinaGUI(String immagine,int gradi)
	{
                this.angle=gradi;
		this.nomeImmagine = immagine;
		impostaImmagine();
	}
	public PedinaGUI(int gradi)
	{
		this.angle=gradi;
		nomeImmagine = "background.png";
		impostaImmagine();
	}
	public PedinaGUI(Pedina pedina,int gradi)
	{
		seme = pedina.getSeme();
		valore = pedina.getValore();

		nomeImmagine=null;
		if (seme == Costanti.DRAGHI)
		{
			nomeImmagine = "DRAGHI_";
		}
		if (seme == Costanti.VENTI)
		{
			nomeImmagine = "VENTI_";
		}
		if (seme == Costanti.FIORI)
		{
			nomeImmagine = "FIORI_";
		}
		if (seme == Costanti.STAGIONI)
		{
			nomeImmagine = "STAGIONI_";
		}
		if (seme == Costanti.CANNE)
		{
			nomeImmagine = "CANNE_";
		}
		if (seme == Costanti.PALLE)
		{
			nomeImmagine = "PALLE_";
		}
		if (seme == Costanti.SCRITTI)
		{
			nomeImmagine = "SCRITTI_";
		}
		nomeImmagine = nomeImmagine+valore;

		nomeImmagine = nomeImmagine+".png";
		impostaImmagine();
	}
	private void impostaImmagine()
	{
		switch (angle){
                    case 0:{
                        this.setIcon(new ImageIcon("images/0/"+nomeImmagine));
                        break;
                    }
                    case 90:{
                        this.setIcon(new ImageIcon("images/90/"+nomeImmagine));
                        break;
                    }
                    case 180:{
                        this.setIcon(new ImageIcon("images/180/"+nomeImmagine));
                        break;
                    }
                    case 270:{
                        this.setIcon(new ImageIcon("images/270/"+nomeImmagine));
                        break;
                    }
                }
	}
    @Override
	protected void paintComponent(Graphics g)
	 {
		//ImageIcon icon = createRotatedImage(new JLabel(),  getIcon(), angle);
                ImageIcon icon = (ImageIcon)getIcon();
		int iconWidth = icon.getIconWidth();
		int iconHeight = icon.getIconHeight();
		double iconAspect = (double) iconHeight / iconWidth;

		int w = getWidth();
		int h = getHeight();
		double canvasAspect = (double) h / w;

		int x = 0, y = 0;

		// Maintain aspect ratio.
		if(iconAspect < canvasAspect)
		{
			// Drawing space is taller than image.
			y = h;
			h = (int) (w * iconAspect);
			y = (y - h) / 2; // center it along vertical

		}
		else
		{
			// Drawing space is wider than image.
			x = w;
			w = (int) (h / iconAspect);
			x = (x - w) / 2; // center it along horizontal
		}
		Image img = icon.getImage();
                g.drawImage(img, x, y, w + x, h + y, 0, 0, iconWidth, iconHeight, null);
	}
	

    /**
     * Creates a rotated version of the input image.
     *
     * @param c            The component to get properties useful for painting, e.g. the foreground
     *                     or background color.
     * @param icon         the image to be rotated.
     * @param rotatedAngle the rotated angle, in degree, clockwise. It could be any double but we
     *                     will mod it with 360 before using it.
     *
     * @return the image after rotating.
     */
    
}
